The present application relates generally to an improved data processing apparatus and method and more specifically to mechanisms for automatic reallocation of shared external storage structures.
Over the years, computer manufacturers have provided processing architectures based on a multi-system shared data approach. Through these architectures, multiple large-scale computer systems, each of which is often referred to as a computer processing complex (CPC) or a central electronic complex (CEC), are interconnected through a shared external storage (SES), which may also be referred to as a shared electronic storage or structured external storage, or another inter processor communication mechanism, to permit each system to gain read/write access to data residing on one or more shared input/output devices.
A coupling facility (CF), aka SES, provides a structured storage for connecting multiple CPCs to allow efficient interchange of data between multiple physical systems while maintaining coherency of the data across all systems. The coupling facility consists of Infiniband or Ethernet links or similar local area network links, central processing units (CPUs), random access memory (RAM) storage that is accessed by the link adapters and CPUs, and control software running in the CPUs.
A CF structure presents a set of objects maintained on behalf of attaching systems. A structure is similar to a shared file in a direct access storage device (DASD), except that structures are maintained in the coupling facility's storage. The CF receives commands from attached CPCs via the links, executes the commands, and returns responses over the links. The commands may create, write to, read from, update, or delete structures on behalf of the attached CPCs. In response to certain commands, the CF may notify attached CPCs of state changes in certain structure objects.
There is an important difference between a CF structure and a shared file. Once a program opens a shared file, it may make arbitrary modifications to any part of the file. A CF structure has a structure to it that cannot be corrupted by an attached client. For example, a list structure contains doubly linked lists. If it were stored in a shared file then a program could corrupt the pointers in a list. But since the structure is stored in a CF and the client can only request high level operations on the structure (such as add, move, or delete list entry) such pointer corruptions are not possible.
In addition to maintaining the integrity of the base structure, the CF also does operations atomically. A single command to the CF that updates a data structure operates in such a way that no other client can see any intermediate results of that update. For example, if the operation is to remove an item from one list and put it on another, no other client will be able to observe the structure with the item missing (i.e. after removal from the first list but before the addition to the second list). If the CF did not do operations atomically, then the clients would all have to implement some sort of global locking protocol on top of the CF to make the operations atomic, which would be far less efficient.